<?php

require_once APPPATH . 'dao/CuponDAO.php';

class CargaCuponesDevueltos extends MY_Controller {

    function __construct() {
        parent::__construct();
    }

    /*
     * index() se ejecuta por defecto al ser cargado del controlador
     */

    public function index() {
        //Se comprueba si el controlador es invocado por primera vez, o
        //si es invocado como producto de enviar el formulario en la vista
        //formularioFiltrado.php
        if (!$this->input->post('submit')) {
            //Si el controlador es invocado por primera vez, se carga la vista inicial
            $this->cargarVista();
        } else {
            //Si el controlador es cargado por el envío del formulario, entonces
            //son validados los datos enviados desde éste
            $this->validarCuponCargado();
        }
    }

    /*
     * Se encarga de cargar las vistas correspondientes al formulario de búsqueda
     * y la respuesta de la búsqueda
     */

    public function cargarVista($mensaje = null) {
        //Se obtienen los datos para crear los campos del formulario
        $dataFormularioCargaCupon = $this->obtenerCamposCargaCupon();
        $dataFormularioCargaCupon['mensaje'] = $mensaje;

        $dataCab['title'] = 'Sistema de Administración de Socios';
        $dataCab['textoSuperiorIzq'] = 'DEFENSORES DE LA TECNO';
        $dataCab['css'] = '<link rel="stylesheet" type="text/css" href="' . site_url() . 'application/views/css_estandar/css_pestanias.css" media="screen" />
                           <link rel="stylesheet" type="text/css" href="' . site_url() . 'application/views/css_estandar/datos_form_css.css" media="screen" />';


        $dataCab['nombre'] = 'Administrador';
        $dataCab['posicionamiento'] = 'Home > Registrar Devueltos';

        //Se carga una cabecera, que contiene el head y las etiquetas de apertura
        //de html y body
        $this->load->view('cabecera', $dataCab);
        //Se carga el formulario de inscripcion de socios
        $this->load->view('formularioCargaCupon', $dataFormularioCargaCupon);
        //Se carga una vista con etiquetas de cierre de html y body
        $this->load->view('cierre');
    }

    /*
     * Retorna arreglos con los parámetros necesarios para crear los campos del
     * formulario.
     * Dichos parámetros son pasados a métodos del Form Helper de CodeIgniter
     */

    public function obtenerCamposCargaCupon() {

        /* Campo Numero Cupon */
        $data['numeroCupon'] = array(
            'name' => 'numeroCupon',
            'id' => 'numeroCupon',
            'value' => set_value('numeroCupon'),
            'maxlength' => '8',
            'size' => '12',
        );

        return $data;
    }

    /*
     * Toma la decisión de cargar la vista inicial mostrando los errores cometidos
     * al cargar el formulario, o de cargar la vista nuevamente pero con el resultado
     * de la búsqueda
     */

    public function validarCuponCargado() {
        //Primero valida que todos los campos del formulario sean correctos.
        //Si no es así, vuelve a mostrar el formulario con los respectivos errores.
        if ($this->validacionNumeroCupon() === FALSE)
            $this->cargarVista();
        else {
            $cuponDAO = new \CuponDAO();
            $cuponDevuelto = $cuponDAO->getCuponByID($this->input->post('numeroCupon'));

            if ($this->registrarDevolucionCupon())
                $mensaje = 'El cupón Nº ' . $cuponDevuelto->getId() . ' ha sido registrado como no pagado con éxito';
            else
                $mensaje = 'Ha ocurrido un error al registrar la devolución del cupón Nº ' . $cuponDevuelto->getId();

            $this->cargarVista($mensaje);
        }
    }

    /*
     * Valida los datos introducidos en el formulario mediante el uso de la librería
     * Form_validation de CodeIgniter
     */

    public function validacionNumeroCupon() {

        $this->form_validation->set_rules('numeroCupon', 'Nº de Cupón', 'required|numeric|max_length[8]|notUnique[models\M_cupon,id,integer]|cuponNoDevuelto|cuponNoPagado|cuponOrdenado|xss_clean|cleanQuery');

        //Se ejecutan las reglas establecidas sobre los campos del formulario en cuestión
        //y se retornan los resultados de la validación
        return $this->form_validation->run();
    }

    private function registrarDevolucionCupon() {

        $cuponModel = new models\M_cupon();
        return $cuponModel->registrarDevolucionCupon($this->input->post('numeroCupon'));
    }

    public function test() {

        // Se ejecutan pruebas para los cupones cargados en la bd se pruebala devolucion
    }

}

?>
